<?php

    /**
     * @package      Barcode
     * @subpackage   Adapter
     *
     * @license      GNU Lesser General Public Licence see LICENCE-LGPL file or http://www.gnu.org/licenses/lgpl.html
     */
    abstract class Barcode_Adapter_Abstract
    {

    /////////////////////////////////////////////////////////////////////////////
    //                               Attributes                                //
    /////////////////////////////////////////////////////////////////////////////

        /**
         * Path where are generated barcode
         *
         * @var     string
         */
        protected $_path = null;

        /**
         * Font size
         *
         * @var     integer
         */
        protected $_fontSize = 3;

        /**
         * Barcode height
         *
         * @var     integer
         */
        protected $_barcodeHeight = 50;

        /**
         * Bar width
         *
         * @var     integer
         */
        protected $_barWidth = 2;

        /**
         * Coding map
         *
         * @var     array
         */
        protected $_codingMap = array();

    /////////////////////////////////////////////////////////////////////////////
    //                               Methods                                   //
    /////////////////////////////////////////////////////////////////////////////

        /**
         * Sets path
         *
         * @param       string      $path
         * @return      void
         */
        public function setPath($path)
        {
            if (!Core_IO_Directory::exists($path)) {
                throw new Core_Exception('Fatal error : Path must exist');
            }

            $this->_path = $path;
        }

        /**
         * Returns path
         *
         * @return      string
         */
        public function getPath()
        {
            return $this->_path;
        }

        /**
         * Sets font size
         *
         * @param       integer      $size
         * @return      void
         */
        public function setFontSize($size)
        {
            $size = intval($size);

            if ($size < 1 || $size > 5) {
                throw new Core_Exception('Fatal error : font size must be between 1 and 5');
            }

            $this->_fontSize = $size;
        }

        /**
         * Sets height
         *
         * @param       integer      $height
         * @return      void
         */
        public function setHeight($height)
        {
            $this->_barcodeHeight = intval($height);
        }

        /**
         * Sets width
         *
         * @param       integer      $width
         * @return      void
         */
        public function setWidth($width)
        {
            $this->_barWidth = intval($width);
        }

    /////////////////////////////////////////////////////////////////////////////
    //                            Abstract Methods                             //
    /////////////////////////////////////////////////////////////////////////////

        /**
         * Creates the barcode image.
         *
         * @param       int                 $value
         * @throws      Core_Exception
         * @return      string              Image path
         */
        abstract public function process($value);
    }